#include <iostream>
#include <vector>

void PrintV(const std::vector<int> &v)
{
    //遍历:迭代器的遍历容器的方式
    //前向迭代器
    for(auto ite = v.begin(); ite != v.end(); ite++)
    {
        std::cout<<*ite<<" ";
    }
    std::cout<<std::endl;
}

int main()
{
    std::vector<int> v;
    //尾插
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    std::cout<<v.capacity()<<std::endl;
    v.shrink_to_fit();
    std::cout<<v.capacity()<<std::endl;
    // v.pop_back();

    PrintV(v);

    //随机迭代器
    auto ite = v.end();
    ite = ite - 2;
    std::cout<<"--"<<*ite<<std::endl;

    //区间删除：下面代码可以理解为删除区间[1,3)之间的内容
    v.erase(v.begin() + 1,v.begin() + 3);
    PrintV(v);
    //容器中的元素个数
    // std::cout<<v.size()<<std::endl;
    // v.push_back(3);
    //容器中的容量
    // std::cout<<v.capacity()<<std::endl;

    v.insert(v.begin(),5);
    PrintV(v);

    v.erase(v.begin());
    PrintV(v);

    // at:越界会抛出异常e
    // []:不会进行越界检查
    std::cout<<v[2]<<std::endl;


    v.front() = 100;
    v.back() = 102;
    PrintV(v);

    //扩容,多余的位置用默认值0填充
    //反向缩减,多余数据清空
    v.resize(10);
    PrintV(v);

    //预留空间,不能提前访问
    // v.reserve(10);
    // PrintV(v);
    std::cout<<v.capacity()<<std::endl;

    //清空容器
    v.clear();

    return 0;
}